package br.ufpe.cin.ip.biblioteca.negocio;

import br.ufpe.cin.ip.biblioteca.entidades.Funcionario;
import br.ufpe.cin.ip.biblioteca.excecoes.FuncionarioJaCadastradoException;
import br.ufpe.cin.ip.biblioteca.excecoes.FuncionarioNaoEncontradoException;
import br.ufpe.cin.ip.biblioteca.excecoes.RepositorioException;
import br.ufpe.cin.ip.biblioteca.iterator.IteratorFuncionario;
import br.ufpe.cin.ip.biblioteca.repositorios.RepositorioFuncionario;

public class CadastroFuncionarioImpl implements CadastroFuncionario {
	private RepositorioFuncionario repositorio;
	
	public CadastroFuncionarioImpl(RepositorioFuncionario repositorioFuncionario) {
		this.repositorio = repositorioFuncionario;
	}
	
	@Override
	public void adicionar(Funcionario funcionario) throws RepositorioException, FuncionarioJaCadastradoException {
		if(this.existe(funcionario)) {
			throw new FuncionarioJaCadastradoException();
		} else {
			this.repositorio.adicionar(funcionario);
		}
	}
	
	@Override
	public void remover(Funcionario funcionario) throws RepositorioException, FuncionarioNaoEncontradoException {
		if(this.existe(funcionario)) {
			this.repositorio.remover(funcionario);
		} else {
			throw new FuncionarioNaoEncontradoException();
		}
	}
	
	@Override
	public void atualizar(Funcionario funcionario) throws RepositorioException, FuncionarioNaoEncontradoException {
		if(this.existe(funcionario)) {
			this.repositorio.atualizar(funcionario);
		} else {
			throw new FuncionarioNaoEncontradoException();
		}
	}
	
	@Override
	public Funcionario buscar(Funcionario funcionario) throws RepositorioException, FuncionarioNaoEncontradoException {
		if(this.existe(funcionario)) {
			return this.repositorio.buscar(funcionario);
		} else {
			throw new FuncionarioNaoEncontradoException();
		}
	}
	
	@Override
	public IteratorFuncionario getIterator() {
		return this.repositorio.getIterator();
	}
	
	@Override
	public boolean existe(Funcionario funcionario) throws RepositorioException {
		return this.repositorio.existe(funcionario);
	}
}
